构建镜像至ACR并部署

本示例模板是用于从Git拉取代码构建Docker镜像,并上传至ACR,然后批量部署到多台ECS。适用于构建镜像,保存到镜像仓库并批量部署的场景。该模板既支持在您账号下已有ECS上构建,还支持临时开启一台ECS进行构建,构建完成后自动释放。同时,该模板支持企业版ACR(收费)和个人版ACR(免费)的上传和拉取,为您提供多种选择方案。

前提条件

示例模板流程

image
  1. 由您指定代码源(例如OSS对象存储或者Git),OOS将为代码源生成临时链接,用于后续代码拉取。

  2. 拉取代码,安装Docker并执行构建脚本。镜像构建完成后,连接ACR将镜像上传至指定仓库。

  1. 拉取已构建的镜像,批量在多台ECS上以Docker容器部署拉取的镜像。

使用示例

代码源准备

本示例使用了一个Spring Boot的示例项目代码来演示,代码已上传到GiteeGitHub仓库,如果想要使用,请先fork到自己的仓库。代码地址:

创建模板

  1. 登录系统运维管理控制台。

  2. 在左侧导航栏,选择自动化任务 > 自定义任务模板,单击创建模板

  3. 构建部署区域,选择构建镜像至ACR并部署示例模板,单击下一步

  4. 流程配置页签下,填写模板参数,然后单击创建模板

    1. 指定您的代码源,为下一步拉取代码做准备,生成一个临时授权链接。

      本示例以Gitee为代码源,填写该代码源的所有者组织仓库以及分支等参数。

      说明
      • 如果您未授权阿里云从您的GitHub/Gitee读取您的代码仓库,请单击前往授权来完成授权操作。

      • 如果您之前已经Fork示例代码,您只需下拉仓库,会自动展示您账号下所有仓库,请选择Fork的示例代码仓库。

      2024-12-16_11-42-41.png

    2. 构建Docker镜像,并上传到ACR。

      1. 指定代码源并选择构建的ECS,再按需提供构建配置脚本。

        构建镜像docker.png

        • 代码源代码源链接:代码源选择git,代码源链接引用了上一个任务的输出(默认为authorizedUrl

        • 选择构建Ecs:需要选择构建的ECS,支持在已有ECS构建新启动临时ECS构建两种方式。

          说明

          选择新启动临时ECS构建方式,系统会以按量付费的方式产生费用。另外,OOS会自动检测ECS上是否已安装Docker,如果没有安装,会自动为您安装Docker社区版。

        • 构建配置:按需提供构建准备命令,当前示例的所有构建都会在Dockerfile内完成,您无需额外准备。

      2. 完成Docker构建并上传至ACR仓库。

        OOS会为您执行docker build命令构建镜像。您需要指定Dockerfile的路径和docker build命令执行的上下文路径。

        ACR.png

        • Dockerfile路径:该路径为Dockerfile文件相对于代码库根目录所在的路径。如下图,Dockerfile就在代码根目录,所以直接填写文件名Dockerfile。

          image

        • 上下文路径:ContextPathdocker build命令执行上下文路径,填写相对于代码根目录的路径,如果不填写,默认为和Dockerfile同一目录。

        • 容器镜像服务类型:您需要提供上传至ACR的相关信息,支持企业版(付费)和个人版(免费)方式。

          容器镜像服务类型

          说明

          相关链接

          个人版

          您可以依次选择您的用户名、密码以及想要上传的仓库名称。

          创建个人版实例

          企业版

          您可以依次下拉选择当前账号下的容器镜像服务实例ID,命名空间以及要上传的仓库名称。

          创建企业版实例

          最后您需要提供构建的镜像版本,默认值是基于当前日期和执行ID构成的,您可按需替换成适合您项目的镜像版本。然后您还需要确认是否通过内网上传镜像,可参考配置专有网络的访问控制

    3. ACR拉取镜像并部署。

      1. 选择要部署到的目标ECS以及拉取的镜像信息。

        image

        • 目标实例:支持手动选择、指定选择等多种方式,您也可以选择多个ECS批量部署。

        • 镜像信息:需拉取上一步上传到ACR的镜像,请选择您上传到的ACR类型(即容器镜像服务类型),其他信息自动引用上一步的任务输出(默认为imageVersionusernamepasswordacrIdnamespace以及repoName),无需重复填写。

          说明

          能否通过内网拉取和上一步内网上传是同样的条件,参考文档配置专有网络的访问控制

      2. 指定Docker的运行选项。

        例如示例填写为-p 8080:8080,这些选项会被添加到docker run命令中,最终会执行。

        image

        docker run -p 8080:8080 <image_name>
        说明

        --name选项不开放指定,因为OOS会把容器命名为一个默认的、与ACR仓库名称一一对应的名字。每次docker run运行当前镜像版本之前,会先检查是否有同名镜像正在运行,如有,会先停止该容器再docker run运行当前版本。这样您下次再往ACR仓库上传最新版本镜像后,可直接再次运行该模板,无需手动停止上个版本的镜像对应的容器。

      3. 可选)设置任务的并发控制参数,控制批量部署到多台ECS的并发速率。

    4. 单击创建模板

执行模板

  1. 登录系统运维管理控制台。

  2. 在左侧导航栏,选择自动化任务 > 自定义任务模板

  3. 自定义任务模板页面,找到已创建的模板,单击对应操作列下的创建执行

  4. 基本信息阶段,配置相应参数,单击下一步:设置参数

  5. 设置参数阶段,如果没有可配置的参数,直接单击下一步:确定

  6. 单击创建

    在任务执行管理页面,执行状态显示为成功时,表示模板执行任务已完成。

    执行模板结果-zh.png

  7. 登录云服务器ECS控制台

  8. 找到您选择的ECS实例并远程连接该实例。

    具体操作,请参见使用Workbench工具以SSH协议登录Linux实例

  9. 执行以下命令,确认本地构建部署是否成功。

    curl http://localhost:8080/hello

    看到返回字段,即表明部署成功。image

    您也可以执行docker ps来查看对应的容器。image

后续使用

后续您的代码有改动或更新,只需把新代码上传到Git仓库,重新执行该CI/CD模板,该模板会先停止当前容器运行,重新生成镜像并推送至ACR,然后,会批量的部署最新版本的镜像到您指定的ECS上。当然,如果您有需要调整模板,也可以更新模板后再重新执行。